﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using XCommunity.Frames;
using XCommunity.Documents;
using XCommunity.Users;

namespace XCommunity
{


  /// <summary>
  /// 社区系统的基础接口
  /// </summary>
  /// <remarks>
  /// 社区系统可以视为是构建在XCommunity基础服务上的应用。
  /// 社区系统提供UserService（用户服务）对象提供用户和权限管理，不同社区系统之间可以共享同一个UserService。
  /// 社区系统还应负责发起话题和提供板块列表。在一个社区系统发起的话题其用户权限和管理权限由这个社区系统的UserService提供。
  /// 社区系统是一个逻辑层的概念，并不影响表现层。
  /// 在一个XCommunity的服务上，可以承载多个社区系统。
  /// 一般而言，一个社区系统的话题可以发布到另一个社区系统管辖的板块，但是板块所在的社区系统不能对话题进行管理。
  /// 社区系统主要用于解决论坛和博客之间的架构差别。
  /// </remarks>
  public interface ICommunitySystem
  {

    /// <summary>
    /// 获取社区系统的用户服务
    /// </summary>
    IUserService UserService
    {
      get;
    }

    /// <summary>
    /// 获取社区系统的唯一标识
    /// </summary>
    Guid Guid
    {
      get;
    }

    /// <summary>
    /// 完成社区系统的初始化工作
    /// </summary>
    void Init();


    ICommunityPlugin[] Plugins
    {
      get;
    }

  }
}
